﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using EvertonApp.AdminWeb.Models;
using EvertonApp.Transporte;
using EvertonApp.AdminWeb.Controllers.Proxy;

namespace EvertonApp.AdminWeb.Controllers
{
    public class Comercio2Controller : Controller
    {
        //
        // GET: /Comercio2/

        public ActionResult Index()
        {
            ComercioModel modeloComercio = (ComercioModel)Session["Comercios"];

            ComercioProxy proxy = new ComercioProxy();

            List<Comercio> comerciosAsociados = (List<Comercio>)proxy.Get();

            if (modeloComercio == null)
            {
                modeloComercio = new ComercioModel();
                modeloComercio.Comercios = new List<Comercio>();
            }

            modeloComercio.Comercios = comerciosAsociados;
            modeloComercio.desdeFormulario = true;
            modeloComercio.ComerciosFiltrados = new List<Comercio>();

            modeloComercio.Nombre = String.Empty;
            modeloComercio.Direccion = String.Empty;
            modeloComercio.Telefono = String.Empty;
            Session["Comercios"] = modeloComercio;

            return View(modeloComercio);
        }

        public ActionResult _grillaComercios(ComercioModel modelo)
        {
            return View(modelo);
        }

        //
        // GET: /Comercio2/Details/5

        public ActionResult Details(Guid id)
        {
            ComercioModel modeloComercio = new ComercioModel();
            ApiProxy proxy = new ApiProxy();

            var comercioDetail = proxy.ObtenerComercio(id);

            modeloComercio.Id = comercioDetail.IdComercio;
            modeloComercio.Nombre = comercioDetail.Nombre;
            modeloComercio.Direccion = comercioDetail.Direccion;
            modeloComercio.Telefono = comercioDetail.Telefono;
            modeloComercio.desdeFormulario = true;

            return PartialView(modeloComercio);
        }

        public ActionResult GuardarComercio(ComercioModel modelo)
        {
            ComercioProxy proxy = new ComercioProxy();

            if (modelo.desdeFormulario)
            {
                Comercio comercio = new Comercio()
                {
                    IdComercio = modelo.Id,
                    Nombre = modelo.Nombre,
                    Direccion = modelo.Direccion,
                    Telefono = modelo.Telefono
                };

                if (modelo.Id == new Guid())
                {
                    Comercio com = proxy.Post(comercio);
                }
                else
                {
                    bool bulean = proxy.Put(comercio.IdComercio, comercio);
                }
            }

            List<Comercio> comerciosAsociados = (List<Comercio>)proxy.Get();

            modelo.Comercios = comerciosAsociados;

            return PartialView("_grillaComercios", modelo);
        }

        //
        // GET: /Comercio2/Create

        //public ActionResult Create()
        //{
        //    if (Request.IsAjaxRequest())
        //    {
        //        ViewBag.IsUpdate = false;
        //        return View("_Customer");
        //    }
        //    else return View(string.Empty);
        //} 

        //
        // POST: /Comercio2/Create

        [HttpPost]
        public ActionResult Create()
        {
            ComercioModel modeloComercio = new ComercioModel();
            modeloComercio.desdeFormulario = true;

            return PartialView("Details", modeloComercio);
        }

        [HttpPost]
        public ActionResult CreateOferta()
        {
            ComercioModel modeloComercio = new ComercioModel();
            modeloComercio.desdeFormulario = true;

            return PartialView("modalOferta", modeloComercio);
        }
        
        //
        // GET: /Comercio2/Edit/5
 
        //public ActionResult Edit(int id)
        //{
        //    return View();
        //}

        //
        // POST: /Comercio2/Edit/5

        [HttpPost]
        public ActionResult Edit(Guid IdComercio, String Nombre, String Direccion, String Telefono)
        {
            ComercioModel modeloComercio = new ComercioModel();
            ComercioProxy proxy = new ComercioProxy();

            var comercioDetail = proxy.Get(IdComercio);

            modeloComercio.Id = comercioDetail.IdComercio;
            modeloComercio.Nombre = comercioDetail.Nombre;
            modeloComercio.Direccion = comercioDetail.Direccion;
            modeloComercio.Telefono = comercioDetail.Telefono;

            return PartialView("Details", modeloComercio);
        }

        //
        // GET: /Comercio2/Delete/5

        //public ActionResult Delete(Guid IdComercio)
        //{
        //    ComercioModel comerciosModel = (ComercioModel)Session["Comercios"];

        //    foreach (var item in comerciosModel.Comercios)
        //    {
        //        if (item.IdComercio == IdComercio)
        //        {
        //            comerciosModel.Comercios.Remove(item);

        //            ApiProxy proxy = new ApiProxy();
        //            var comercioDetail = proxy.EliminarComercio(IdComercio);
        //            break;
        //        }
        //    }

        //    comerciosModel.Nombre = String.Empty;
        //    comerciosModel.Direccion = String.Empty;
        //    comerciosModel.Telefono = String.Empty;
        //    Session["Comercios"] = comerciosModel;

        //    return RedirectToAction("Index");
        //}

        //
        // POST: /Comercio2/Delete/5


        public ActionResult Delete(Guid IdComercio)
        {
            ComercioModel comerciosModel = (ComercioModel)Session["Comercios"];

            foreach (var item in comerciosModel.Comercios)
            {
                if (item.IdComercio == IdComercio)
                {
                    comerciosModel.Comercios.Remove(item);

                    ComercioProxy proxy = new ComercioProxy();
                    var comercioDetail = proxy.Delete(IdComercio); 
                    break;
                }
            }

            comerciosModel.Nombre = String.Empty;
            comerciosModel.Direccion = String.Empty;
            comerciosModel.Telefono = String.Empty;
            Session["Comercios"] = comerciosModel;

            return PartialView("_grillaComercios", comerciosModel);
        }

        public ActionResult FiltroComercio(ComercioModel modelo)
        {
            ComercioModel comerciosModel = (ComercioModel)Session["Comercios"];
            ComercioProxy proxy = new ComercioProxy();

            if (!modelo.desdeFormulario && comerciosModel.ComerciosFiltrados != null && comerciosModel.ComerciosFiltrados.Count > 0)
            {
                if (modelo.Comercios == null)
                    modelo.Comercios = new List<Comercio>();
                modelo.Comercios = comerciosModel.ComerciosFiltrados;
            }
            else
            {


                List<Comercio> comercios = (List<Comercio>)proxy.Get();
                List<Comercio> comerciosFiltrados = comercios.Where(comercio => comercio.Nombre.ToUpper().Contains(modelo.Nombre == null ? String.Empty : modelo.Nombre.ToUpper())
                                                                    && comercio.Direccion.ToUpper().Contains(modelo.Direccion == null ? String.Empty : modelo.Direccion.ToUpper())
                                                                    && comercio.Telefono.ToUpper().Contains(modelo.Telefono == null ? String.Empty : modelo.Telefono.ToUpper())).ToList();
                modelo.Comercios = comerciosFiltrados;
                comerciosModel.ComerciosFiltrados = comerciosFiltrados;

                Session["Comercios"] = comerciosModel;
            }

            return PartialView("_grillaComercios", modelo);
        }

        public ActionResult GestionarOfertas(Guid IdComercio)
        {
            ComercioModel modelo = (ComercioModel)Session["Comercios"];
            OfertaProxy proxy = new OfertaProxy();

            List<Oferta> ofertas = (List<Oferta>)proxy.Get();
            List<Oferta> ofertasComercio = ofertas.Where(oferta => oferta.Comercio.IdComercio == IdComercio).ToList();

            modelo.Ofertas = ofertasComercio;

            return PartialView(modelo);
        }

        public ActionResult _grillaOfertas(Guid IdComercio)
        {
            return PartialView();
        }   
    }
}
